package com.cacho.s2b.lesson.util;

import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;
import java.util.Map;
import java.util.UUID;

/**
 * @Description 处理json格式数据
 * @Author LingWei
 * @date 2024/01/28
 **/

@Slf4j
public class JsonUtil {
    // jsonPath = $.msg
    public static String readAsString(String jsonStr, String jsonPath) {
        String retString = "";
        Object obj = JsonPath.read(jsonStr, jsonPath);
        if (obj != null) {
            retString = switch (obj.getClass().getTypeName()) {
                case "java.lang.Double", "java.lang.Float", "java.lang.Long" ->
                        String.valueOf(new BigDecimal(obj + ""));
                default -> String.valueOf(obj);
            };
        }
        return retString;
    }

    public static String delete(String jsonStr, String jsonPath) {
        DocumentContext jsonContext = JsonPath.parse(jsonStr);
        jsonContext.delete(jsonPath);
        return jsonContext.jsonString();
    }

    public static String setByPath(String jsonStr, String jsonPath, Object value) {
        DocumentContext jsonContext = JsonPath.parse(jsonStr);
        jsonContext.set(jsonPath, value);
        return jsonContext.jsonString();
    }

    public static String putByPath(String jsonStr, String jsonPath, String key, Object value) {
        DocumentContext jsonContext = JsonPath.parse(jsonStr);
        jsonContext.put(jsonPath, key, value);
        return jsonContext.jsonString();
    }

    public static String setJsonByPath(String jsonStr, String jsonPath, String value) {
        String placeHolder = UUID.randomUUID().toString();
        DocumentContext jsonContext = JsonPath.parse(jsonStr);
        jsonContext.set(jsonPath, placeHolder);
        // log.info("更新后的json：{}", jsonContext.jsonString());
        // log.info("更新后的json2：{}", jsonContext.jsonString().replace("\"" + placeHolder + "\"", value));
        return jsonContext.jsonString().replace("\"" + placeHolder + "\"", value);
    }
}
